import 'package:flutter/material.dart';
import 'package:carousel_slider/carousel_slider.dart';

/// 轮播图组件
///
/// 这是一个通用的轮播图组件，支持同时显示网络图片和本地资源图片
///
/// 参数:
/// - images: 图片列表，支持两种格式：
///   - 网络图片URL（以http://或https://开头）
///   - 本地资源路径（如'lib/banner/example.jpg'）
/// - onPageChanged: 页面切换时的回调函数，参数为：
///   - index: 当前页面索引
///   - reason: 切换原因
/// - currentIndex: 当前显示的页面索引，用于外部控制
class ImageCarousel extends StatelessWidget {
  /// 图片列表
  final List<String> images;

  /// 页面切换回调
  final Function(int, CarouselPageChangedReason)? onPageChanged;

  /// 当前页面索引
  final int? currentIndex;

  const ImageCarousel({
    Key? key,
    required this.images,
    this.onPageChanged,
    this.currentIndex,
  }) : super(key: key);

  /// 判断图片是否为网络图片
  ///
  /// 参数:
  /// - path: 图片路径或URL
  /// 返回值:
  /// - true: 是网络图片
  /// - false: 是本地资源图片
  bool _isNetworkImage(String path) {
    return path.startsWith('http://') || path.startsWith('https://');
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,  // 宽度占满父容器
      height: 200,             // 固定高度200像素
      margin: EdgeInsets.only(
        top: MediaQuery.of(context).padding.top // 顶部留出状态栏高度
      ),
      child: CarouselSlider(
        // 轮播图配置选项
        options: CarouselOptions(
          autoPlay: true,       // 自动轮播
          viewportFraction: 1.0, // 每张图片占满容器宽度
          aspectRatio: 16/9,    // 16:9的宽高比
          enlargeCenterPage: false, // 不放大中间图片
          onPageChanged: onPageChanged, // 页面切换回调
        ),
        // 轮播图项列表
        items: images.map((path) {
          return Builder(
            builder: (BuildContext context) {
              return Container(
                width: double.infinity, // 宽度占满容器
                margin: EdgeInsets.zero, // 无外边距
                decoration: BoxDecoration(
                  image: DecorationImage(
                    // 根据图片类型选择不同的ImageProvider
                    image: _isNetworkImage(path)
                      ? NetworkImage(path) // 网络图片
                      : AssetImage(path) as ImageProvider, // 本地资源图片
                    fit: BoxFit.fill, // 图片填充方式
                  ),
                ),
              );
            },
          );
        }).toList(), // 转换为列表
      ),
    );
  }
}